import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;


public class DoorloopAlgoritme {
	
	private double kortsteAfstand = Double.POSITIVE_INFINITY;
	private Point[] dichtstePuntenPaar;
	private double kGem = 0;
	private int kMax = 0;
	
	
	public DoorloopAlgoritme(){
		dichtstePuntenPaar = new Point[2];
	}
	
	public void setDichtstePuntenPaar(Point[] dichtstePuntenPaar) {
		this.dichtstePuntenPaar = dichtstePuntenPaar;
	}
	
	public void setkGem(double kGem) {
		this.kGem = kGem;
	}
	
	public void setkMax(int kMax) {
		this.kMax = kMax;
	}
	
	public int getkMax() {
		return kMax;
	}
	
	public double getkGem() {
		return kGem;
	}
	
	
	public void setKortsteAfstand(double kortsteAfstand) {
		this.kortsteAfstand = kortsteAfstand;
	}
	
	public Point[] getDichtstePuntenPaar() {
		return dichtstePuntenPaar;
	}
	
	public double getKortsteAfstand() {
		return kortsteAfstand;
	}
	
	public void berekenDichtstePuntenPaar(ArrayList<Point> rij){
		setKortsteAfstand(Double.POSITIVE_INFINITY);
		
		Collections.sort(rij);
		int N = rij.size();
		double tel = 0;
		
		for (int i = 0; i < N; i ++){
			int puntenInStrook = 0;
			for(int j = i - 1; j >= 0 && rij.get(j).getCor()[0] >= rij.get(i).getCor()[1] - getKortsteAfstand() ; j--){
				
				double afstand = rij.get(i).getDistance(rij.get(j));
				if(afstand < getKortsteAfstand()){
					setKortsteAfstand(afstand);
					dichtstePuntenPaar[0]=rij.get(i);
					dichtstePuntenPaar[1]=rij.get(j);
				}
				puntenInStrook++;
			}
			if(puntenInStrook > getkMax()){
				setkMax(puntenInStrook);
			}
			tel += puntenInStrook;
		}
		setkGem(tel/(N-2));

}
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	

}
